//1. 导入express
const express = require("express");
//2. 创建web服务器
const app = express();

//4. 监听客户端的GET和POST请求，并向客户端响应具体的内容
app.get("/user", (req, res) => {
  //返回JSON对象
  res.send({ username: "fan", age: 10, gender: "男" });
});
app.post("/user", (req, res) => {
  // 返回文本字符串
  res.send({ username: "huo", age: 10, gender: "女" });
});
//3.启动web服务器
app.listen(80, () => {
  console.log("express server running at http://127.0.0.1");
});

// 监听GET请求
/**
 * param1: 客户端请求的URL
 * param2: 请求对应的处理函数
 *      req：请求对象，包含了与请求相关的属性和方法
 *      res：响应对象，包含了与响应相关的属性和方法
 */
// app.get("请求的URL", function (req, res) {
//   /**处理函数 */
// });
//监听POST请求
/**
 * param1: 客户端请求的URL
 * param2: 请求对应的处理函数
 *      req：请求对象，包含了与请求相关的属性和方法
 *      res：响应对象，包含了与响应相关的属性和方法
 */

// app.post("请求的URL", function (req, res) {
//   /**处理函数 */
// });

//把内容响应给客户端
// 通过res.send()方法，可以把处理好的内容，发送给客户端

//获取URL中携带的查询参数
//通过req.query对象，可以访问到客服端通过字符串的形式，发送到服务器的参数
app.get("/query_user", (req, res) => {
  //req.query默认空对象
  //客户端使用?name=fan&age=10 这种查询字符串形式，发送到服务器的参数
  // 可以通过req.query对象访问到，例如：
  // req.query.name req.query.age
  console.log(req.query);
  res.send(req.query);
});
//获取URL中的动态参数
//通过req.params对象，可以访问到URL中，通过：匹配到动态参数
//:id动态参数 :后跟参数名字
app.get("/user/:id/:username", (req, res) => {
  //req.params默认是一个空对象
  //里面存放着通过:动态匹配到的参数值
  console.log(req.params);
  res.send(req.params);
});

//express.static()
//创建一个静态资源服务器
//Express在指定的静态目录中查找文件，并对外提供资源的访问路径
// 因此，存放静态文件的目录名不会出现在URL中
app.use(express.static());

//托管多个静态资源目录
//多次调用express.static()函数
//访问静态资源文件时，express.static函数会根据目录添加顺序查找所需的文件
app.use(express.static());
app.use(express.sstatic());

//挂载路径前缀
//在托管的静态资源访问路径之前，挂载路径前缀，则可以使用以下方式
//通过带有/public前缀地址来访问public目录中的文件
app.use("/public", express.static("public"));

//使用nodemon
//编写调试Nodejs项目时候，对于修改的代码需要手动启动，繁琐。
//nodemon可以监听项目文件的变动，自动重启项目
// npm install -g nodemon
// nodemon xx.js
